package com.rockontrol.ele.service.model.dbtransaction.impl;

import java.util.List;

import com.rksp.svc.BaseSvc;
import com.rksp.util.DatabaseUtil;
import com.rockontrol.ele.pojo.Ba物资分类;
import com.rockontrol.ele.pojo.Ma设备预检修台帐;
import com.rockontrol.ele.service.model.dbtransaction.MaBaseTrans;

public class MaBaseTransImpl extends BaseSvc implements MaBaseTrans{

	public void serviceExecCheckPoint() {
		//将不使用的设备状态置为无效
		service.execSQL("update MA_设备预检修台帐 set 状态='无效' where 设备ID in (select OID from MA_设备 where 设备状态 = '报废')");
		String dataBaseType = DatabaseUtil.getDataBaseType(dataSource);
		List<Ma设备预检修台帐> list=null;
		//新添加的在用设备预检修计划
		if("SQLSERVER".equals(dataBaseType)){
		        //数据库为sqlserver时执行的操作
	        list=service.findSQLAlias("select convert(nvarchar(32),eq.OID) 设备id,eq.设备编码,convert(nvarchar(32),ck.设备分类ID) 设备分类id,ck.设备分类,ck.设备分类编码,ck.设备型号,convert(nvarchar(32),ck.设备型号ID) 设备型号id,convert(nvarchar(32),ck.OID) 检修周期id,'有效' 状态,ck.检修类型 ,DATEADD(DAY,ck.检修周期,GETDATE()) 预计检修时间 from MA_设备 eq left join MA_设备检修周期 ck on eq.设备分类ID=ck.设备分类ID and eq.设备型号ID=ck.设备型号ID where 设备状态 = '在用' and eq.OID not in (select distinct 设备ID from MA_设备预检修台帐)", Ma设备预检修台帐.class);
		}else if("ORACLE".equals(dataBaseType)){
		        //数据库为oracle时执行的操作
	        list=service.findSQLAlias("select to_char(eq.OID) \"设备id\",eq.设备编码,to_char(ck.设备分类ID) \"设备分类id\",ck.设备分类,ck.设备分类编码,ck.设备型号,to_char(ck.设备型号ID) \"设备型号id\",to_char(ck.OID) \"检修周期id\",'有效' 状态,ck.检修类型 ,sysdate+ck.检修周期 预计检修时间 from MA_设备 eq left join MA_设备检修周期 ck on eq.设备分类ID=ck.设备分类ID and eq.设备型号ID=ck.设备型号ID where 设备状态 = '在用' and eq.OID not in (select distinct 设备ID from MA_设备预检修台帐)", Ma设备预检修台帐.class);
		}
		
		if(list!=null)
			for(Ma设备预检修台帐 acc:list){
				service.addObj(acc);
			}
		//修改有效设备的剩余时间
		if("SQLSERVER".equals(dataBaseType)){
		        //数据库为sqlserver时执行的操作
		    service.execHQL("update Ma设备预检修台帐 set 剩余时间=DATEDIFF(DAY,GETDATE(),预计检修时间) where 状态='有效'");
		}else if("ORACLE".equals(dataBaseType)){
		        //数据库为oracle时执行的操作
		    service.execHQL("update Ma设备预检修台帐 set 剩余时间=round(预计检修时间-sysdate) where 状态='有效'");
		}
	}

	public boolean serviceUpdateDropTypes(String pid,String code,String tid,String type) {
		Ba物资分类 parent=(Ba物资分类) service.findObj(Ba物资分类.class, pid);
		if("型号".equals(type)){
			service.execSQL("update BA_规格型号 set 物资编号='"+parent.get编码()+"',物资分类ID='"+parent.getOid()+"',分类名称='"+parent.get名称()+"' where OID='"+tid+"' ");
			service.execSQL("update MA_设备 set 分类编码='"+parent.get编码()+"',设备分类ID='"+parent.getOid()+"',分类名称='"+parent.get名称()+"'  where 设备型号ID='"+tid+"'");
		}else{
			Ba物资分类 drop=(Ba物资分类) service.findObj(Ba物资分类.class, tid);
			String dc=parent.get编码()+drop.get编码().substring(code.length(), drop.get编码().length());
			service.execSQL("update BA_物资分类 set 编码 = '"+dc+"',父节点ID='"+parent.getOid()+"'  where 编码 like '"+drop.get编码()+"%'");
			service.execSQL("update BA_规格型号 set 物资编号=(select 编码 from BA_物资分类  where OID = 物资分类ID) where 物资编号 like '"+drop.get编码()+"%'");
		}
		return true;
	}

}
